package com.ctshk.rpc.season.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.season.dto.FixedSeasonProductPageDTO;
import com.ctshk.rpc.season.dto.SeasonProductChannelSetInfoDTO;
import com.ctshk.rpc.season.dto.StrategyInfoDateDTO;
import com.ctshk.rpc.season.req.SearchFixedProductReq;
import com.ctshk.rpc.season.req.SeasonProductStrategyInfoReq;
import com.ctshk.rpc.season.req.SeasonProductStrategyQueryByDateReq;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * <p>
 * 套票产品成本策略表 服务类
 * </p>
 *
 * @author 杨林
 * @since 2021-03-15
 */
public interface ISeasonProductStrategyService  {
    /**
     * 产品中心 固定套票搜索列表
     * @param req
     * @param user
     * @return
     */
    PageResponse<FixedSeasonProductPageDTO> searchProductCenterSeasonFixed(SearchFixedProductReq req, TokenUser user);

    /* @MethodName: 保存固定套票加幅策略信息
     * @Description: TODO
     * @Param: 
     * @Return: 
     * @Author: 杨林
     * @Date:2021/3/15 18:00
    **/
    Result saveSeasonProductStrategy(SeasonProductStrategyInfoReq infoReq, TokenUser user);

    /* @MethodName: 获取固定套票加幅策略信息
     * @Description: TODO
     * @Param: 
     * @Return: 
     * @Author: 杨林
     * @Date:2021/3/16 15:17
    **/
    Result queryByProductId(Long productId);

    /* @MethodName: 根据产品id 跟日期 获取日期是否设有加幅
     * @Description: TODO
     * @Param: 
     * @Return: 
     * @Author: 杨林
     * @Date:2021/3/17 9:31
    **/
    Result queryBydate(SeasonProductStrategyQueryByDateReq queryByDateReq);

    /* @MethodName: 给产品设置推荐
     * @Description: TODO
     * @Param: 
     * @Return: 
     * @Author: 杨林
     * @Date:2021/3/17 11:29
    **/
    Result setRecommend(Long productId,Integer isRecommend);





    /* @MethodName: 根据用户id 日期 固定套票产品id  获取加幅设置信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/18 11:18
    **/
    SeasonProductChannelSetInfoDTO getProductStrategyByUserIdDate(Long useId, LocalDate date, Long productId,Integer channelType);

    
    /* @MethodName: 根据固定套票 对应的产品成本价 算出固定套票的加幅值
     * @Description: TODO
     * @Param: 
     * @Return: 
     * @Author: 杨林
     * @Date:2021/3/22 10:57
    **/

    BigDecimal getFixedSeasonAdjustValueByCost(Long userId,LocalDate date,Long productId, BigDecimal cost, Integer channelType);

    /* @MethodName: 根据时间段 和 产品id 获取 可选的日历信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/23 15:43
     **/
    List<StrategyInfoDateDTO> getOptionalCalendar(SeasonProductStrategyQueryByDateReq req, TokenUser user,Integer channelType);
}
